package com.jdjc.subject.application.controller;

import com.google.common.base.Preconditions;
import com.jdjc.subject.application.convert.SubjectInfoDTOConverter;
import com.jdjc.subject.application.convert.SubjectLableDTOConverter;
import com.jdjc.subject.application.convert.SubjectLikedDTOConverter;
import com.jdjc.subject.application.dto.SubjectInfoDTO;
import com.jdjc.subject.application.dto.SubjectLabelDTO;
import com.jdjc.subject.application.dto.SubjectLikedDTO;
import com.jdjc.subject.common.entity.PageResult;
import com.jdjc.subject.common.entity.Result;
import com.jdjc.subject.common.util.LoginUtil;
import com.jdjc.suject.domin.entity.SubjectInfoBO;
import com.jdjc.suject.domin.entity.SubjectLabelBO;
import com.jdjc.suject.domin.entity.SubjectLikedBO;
import com.jdjc.suject.domin.service.SubjectLikedDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
@Slf4j
@RequestMapping("/subjectLiked")
public class SubjectLikedController {
    @Resource
    private SubjectLikedDomainService subjectLikedDomainService;

    /**
     * 点赞或者不点赞
     * @param subjectLikedDTO
     * @return
     */
    @PostMapping("/add")
    public Result<Boolean> add(@RequestBody SubjectLikedDTO subjectLikedDTO) {
        try {
            if (log.isInfoEnabled()){
                log.info(" SubjectLikedController：add:dto:{}",subjectLikedDTO);
            }
            //断言 在代码中插入特定的语句来检查某个条件是否为真。如果条件为假，即断言失败，程序通常会抛出一个异常并终止执行。
            Preconditions.checkNotNull(subjectLikedDTO.getSubjectId(),"题目id不能为空");
            Preconditions.checkNotNull(subjectLikedDTO.getStatus(),"点赞状态 1点赞 0没点赞 不能为空");
            String loginId = LoginUtil.getLoginId();
            subjectLikedDTO.setCreatedBy(loginId);
            Preconditions.checkNotNull(subjectLikedDTO.getCreatedBy(),"点赞人不能为空");
            //自定义类型装换
            SubjectLikedBO subjectLikedBO = SubjectLikedDTOConverter.INSTANCE.convertDTOToInfoBO(subjectLikedDTO);
            //新增
            subjectLikedDomainService.add(subjectLikedBO);
            return Result.ok(true);
        }catch(Exception e) {
            log.error("SubjectLikedController：add:error:{}",e.getMessage(),e);
            return Result.fail("点赞/取消点赞失败");
        }

    }

    /**
     * 查询我的点赞列表
     */
    @PostMapping("/getSubjectLikedPage")
    public Result<PageResult<SubjectLikedDTO>> getSubjectLikedPage(@RequestBody SubjectLikedDTO subjectLikedDTO) {
        try {
            if (log.isInfoEnabled()) {
                log.info(" SubjectLikedController：getSubjectLikedPage:dto:{}", subjectLikedDTO);
            }
            //自定义类型装换
            SubjectLikedBO subjectLikedBO=SubjectLikedDTOConverter.INSTANCE.convertDTOToInfoBO(subjectLikedDTO);
            subjectLikedBO.setPageNo(subjectLikedDTO.getPageNo());
            subjectLikedBO.setPageSize(subjectLikedDTO.getPageSize());

            PageResult<SubjectLikedBO> boPageResult=subjectLikedDomainService.getSubjectLikedPage(subjectLikedBO);
            return Result.ok(boPageResult);
        } catch (Exception e) {
            log.error("SubjectLikedController：getSubjectLikedPage:error:{}",e.getMessage(),e);
            return Result.fail("分页查询题目列表失败");
        }
    }
}
